#ifndef __ENCODER_CONFIG_H
#define __ENCODER_CONFIG_H

#include "stm32f10x.h"  // 包含STM32F10x系列外设库定义，提供GPIO、TIM等寄存器结构体

/**
 * @brief  编码器初始化函数，配置TIM8为编码器接口模式
 * @param  无
 * @retval 无
 * @功能说明：
 *         1. 初始化编码器A、B相输入引脚（PC6、PC7）为上拉输入
 *         2. 配置TIM8定时器为编码器接口模式，双通道捕获正交脉冲
 *         3. 使能TIM8时钟，设置计数参数（不分频，最大计数范围65535）
 *         4. 启动定时器计数，开始检测编码器脉冲
 */
void Encoder_Config(void);

/**
 * @brief  获取编码器指定时间内的脉冲变化量（反映转速和方向）
 * @param  无
 * @retval int16_t：脉冲变化量（正值为正转，负值为反转）
 * @功能说明：
 *         1. 读取TIM8当前计数器值（记录A、B相脉冲的相对变化）
 *         2. 将计数器清零，准备下一次测量
 *         3. 返回读取的脉冲变化量，反映两次调用之间的编码器转动情况
 * @应用场景：
 *         配合定时调用（如每10ms一次），计算转速：
 *         转速 = 脉冲变化量 / (编码器分辨率 × 时间间隔)
 */
int16_t Encoder_GetSpeed(void);

/* 编码器硬件引脚映射宏定义 --------------------------------------------------*/
#define ENCODER_CLK     RCC_APB2Periph_GPIOC  // 编码器引脚所在GPIO端口时钟（GPIOC）
#define ENCODER_PIN_A   GPIO_Pin_6            // 编码器A相输入引脚（PC6）
#define ENCODER_PIN_B   GPIO_Pin_7            // 编码器B相输入引脚（PC7）
#define ENCODER_PORT    GPIOC                 // 编码器引脚所在GPIO端口（GPIOC）
// 硬件说明：
// - PC6和PC7为TIM8_CH1和TIM8_CH2的默认复用引脚，无需额外重映射
// - 上拉输入模式适配编码器的推挽输出（默认高电平，转动时输出高低脉冲）

/* 定时器硬件映射宏定义 ------------------------------------------------------*/
#define TIM_CLK         RCC_APB2Periph_TIM8   // 定时器时钟（TIM8挂载在APB2总线）
#define TIMx            TIM8                  // 使用TIM8定时器（高级定时器，支持编码器模式）
// 定时器选择理由：
// - TIM8为高级定时器，支持编码器接口模式（双通道正交解码）
// - APB2总线时钟为72MHz，可支持高频脉冲计数（无分频时）

#endif  // __ENCODER_CONFIG_H
